home *** CD-ROM | disk | FTP | other *** search
- unit Dblook;
-
- interface
-
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- StdCtrls, Forms, DBCtrls, DB, DBTables, Mask, ExtCtrls, Dialogs,
- clipbrd, scaler;
-
- type
-
- TDDedit = class(TForm)
- ScrollBox: TScrollBox;
- Label1: TLabel;
- EditFIELD_NAME: TDBEdit;
- Label3: TLabel;
- EditFIELD_LEN: TDBEdit;
- Label4: TLabel;
- EditFIELD_DEC: TDBEdit;
- Label6: TLabel;
- MemoIDX_EXPRES: TDBMemo;
- Label7: TLabel;
- EditTAB_ORDER: TDBEdit;
- Label8: TLabel;
- EditTABLE_NAME: TDBEdit;
- CheckBoxREQUIRED: TDBCheckBox;
- Label10: TLabel;
- EditDEFAULT: TDBEdit;
- MemoDEFINE: TDBMemo;
- Label12: TLabel;
- MemoVALIDVALUE: TDBMemo;
- Label13: TLabel;
- MemoNOTES: TDBMemo;
- Label14: TLabel;
- EditHINT: TDBEdit;
- Label15: TLabel;
- EditSCR_PROMPT: TDBEdit;
- Label16: TLabel;
- MemoHELP: TDBMemo;
- CheckBoxHASLINK: TDBCheckBox;
- Label18: TLabel;
- EditSRCLINKTBL: TDBEdit;
- Label19: TLabel;
- EditSRCLINKFLD: TDBEdit;
- CheckBoxIS_CALC: TDBCheckBox;
- Label21: TLabel;
- MemoFORMULA: TDBMemo;
- DBNavigator: TDBNavigator;
- Panel1: TPanel;
- Panel2: TPanel;
- Label9: TLabel;
- CheckBoxMDX: TDBCheckBox;
- LEditMask: TLabel;
- EditEDITMASK: TDBEdit;
- DBRadioGroup1: TDBRadioGroup;
- Label2: TLabel;
- DataSource1: TDataSource;
- FontDialog1: TFontDialog;
- FontButton: TButton;
- CheckBox1: TCheckBox;
- B_resize: TButton;
- Label5: TLabel;
- Label11: TLabel;
- procedure FormCreate(Sender: TObject);
- procedure FormActivate(Sender: TObject);
- procedure Table1FIELD_TYPEValidate(Sender: TField);
- procedure Table1FIELD_DECValidate(Sender: TField);
- procedure Table1FIELD_LENValidate(Sender: TField);
- procedure EditFIELD_LENEnter(Sender: TObject);
- procedure EnterEditFiel(Sender: TObject);
- procedure ExitEditField(Sender: TObject);
- procedure EditFIELD_DECEnter(Sender: TObject);
- procedure Table1AfterOpen(DataSet: TDataset);
- procedure EditTABLE_NAMEExit(Sender: TObject);
- procedure FontButtonClick(Sender: TObject);
- procedure FormKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure CheckBox1Click(Sender: TObject);
- procedure B_resizeClick(Sender: TObject);
- procedure MemoIDX_EXPRESExit(Sender: TObject);
- procedure MemoIDX_EXPRESEnter(Sender: TObject);
- procedure MemoDEFINEClick(Sender: TObject);
- procedure DBNavigatorClick(Sender: TObject; Button: TNavigateBtn);
- private
- fformfiddle : boolean; {resized memo has shifted form}
- foldtop,
- foldheight : integer; { for resizing memo fields}
- { private declarations }
- public
- { public declarations }
- Cur_data_type : integer; {itemindex from DBRADIOGROUP}
- end;
-
- var
- DDedit: TDDedit;
-
- implementation
- uses mainmenu, utils, editmemo;
-
- const
- validDataTypes : set of char = ['C','L','N','M','D'];
-
-
- procedure TDDedit.FormCreate(Sender: TObject);
- begin
- with DBRadioGroup1.items do begin
- clear;
- add('C : Character field');
- add('N : Numeric field');
- add('L : Boolean field');
- add('D : Date field');
- add('M : Memo field');
- end;
- with DBRadioGroup1.values do begin
- clear;
- add('C');
- add('N');
- add('L');
- add('D');
- add('M');
- end;
- ScaleForm(sender);
- end;
-
- procedure TDDedit.FormActivate(Sender: TObject);
- var
- Tlen,Tdec,ttab : TsmallintField;
- Tfldname : TStringField;
- begin
- DDedit.caption := 'Editing '+main.ddListBox.items[0];
- main.sourcedatabase.close;
- main.SourceDatabase.Params.clear;
- main.SourceDatabase.Params.Add('PATH='+main.DDPathName);
- main.SourceDatabase.open;
- DataSource1.DataSet:= main.dicttable;
- {Tlen := TsmallIntField.Create(main.dicttable);
- Tlen.FieldName := 'FIELD_LEN';
- Tlen.Name := Main.DictTABLE.Name + Tlen.FieldName;
- Tlen.Index := Main.dictTable.FieldCount;
- Tlen.DataSet := Main.DictTable;
- {Tlen creates itself fine, but when we get to ..Active := true,
- we get "Field FIELD_NAME can't be found."
- So when we add field_name, we get
- the data is not of the expected type!}
-
- {Tfldname := TstringField.Create(Self);
- Tfldname.FieldName := 'FIELD_NAME';
- Tfldname.Name := Main.DictTABLE.Name + Tfldname.FieldName;
- Tfldname.Index := Main.dictTable.FieldCount;
- Tfldname.DataSet := Main.DictTable;}
- main.dicttable.Active:= True;
- main.dicttable.fields[0].required := true;
- main.dicttable.FieldDefs.UpDate;
- main.dicttable.edit;
- show;
- end;
-
- procedure TDDedit.Table1FIELD_DECValidate(Sender: TField);
- begin
- with DBRadioGroup1 do
- if pos(DbRadioGroup1.values[itemindex], 'CLDM') <> 0
- then editField_dec.text := '0';
- end;
-
- Procedure TDDedit.table1Field_typeValidate(sender: TField);
- begin
- if DBRAdioGroup1.itemindex = -1
- then MessageDlg('Must select a data type', mtWarning, [mbOK], 0);
- end;
-
- procedure TDDedit.Table1FIELD_LENValidate(Sender: TField);
- begin
- case DBRAdioGroup1.values[Cur_data_type][1] of
- 'D' : EditField_len.text := '8';
- 'L' : EditField_len.text := '1';
- 'M' : EditField_len.text := '10';
-
- end;
- end;
-
-
- procedure TDDedit.EditFIELD_LENEnter(Sender: TObject);
- begin
- if DBRadioGroup1.itemindex = -1
- then begin
- MessageDlg('Must specify a data type', mtWarning, [mbOK], 0);
- DBradioGroup1.setfocus;
- end
- else begin
- EditField_len.color := clYellow;
- editField_len.readOnly := true;
- editField_len.hint := 'Fixed length data type.';
- case DBRAdioGroup1.values[DBRadioGroup1.itemindex][1] of
- 'C' : begin
- EditField_len.readOnly := false;
- EditField_len.hint := 'Max length is 254';
- end;
- 'D' : EditField_len.text := '8';
- 'L' : EditField_len.text := '1';
- 'M' : EditField_len.text := '10';
- 'N' : begin
- EditField_len.readOnly := false;
- EditField_len.hint := 'Max length is 20 (number of digits)';
- end;
- end;
- end;
- end;
-
- procedure TDDedit.EditFIELD_DECEnter(Sender: TObject);
- begin
- if DBRadioGroup1.itemindex = -1
- then begin
- MessageDlg('Must specify a data type', mtWarning, [mbOK], 0);
- DBradioGroup1.setfocus;
- exit;
- end;
- cur_data_type := dbRadioGroup1.itemIndex;
- (sender as tdbedit).color := clYellow;
- if pos(DbRadioGroup1.values[DBRadioGroup1.itemindex][1], 'CLDM') <> 0
- then begin
- editField_dec.text := '0';
- editField_dec.ReadOnly := true;
- editField_dec.hint := 'No Decimal length with this data type.';
- editField_dec.showHint := true;
- end
- else begin
- editField_dec.ReadOnly := false;
- editField_dec.hint := 'Decimal length includes decimal; subtracts from length';
- editField_dec.showHint := true;
- end;
- end;
-
-
- procedure TDDedit.EnterEditFiel(Sender: TObject);
- begin
- if sender is tdbedit
- then (sender as tdbedit).color := clYellow;
- if sender is tdbCheckBox
- then (sender as tdbCheckBox).color := clYellow;
- if sender is tdbMemo
- then (sender as tdbMemo).color := clYellow;
- if sender is tdbRadioGroup
- then (sender as tdbRadioGroup).color := clYellow;
- end;
-
- procedure TDDedit.ExitEditField(Sender: TObject);
- begin
- if sender is tdbedit
- then (sender as tdbedit).color := clWhite;
- if sender is tdbCheckBox
- then (sender as tdbCheckBox).color := clWhite;
- if sender is tdbMemo
- then (sender as tdbMemo).color := clWhite;
- if sender is tdbRadioGroup
- then (sender as tdbRadioGroup).color := clWhite;
- end;
-
-
- procedure TDDedit.Table1AfterOpen(DataSet: TDataset);
- begin
- if DBRAdioGroup1.itemindex = -1
- then DBRadioGroup1.itemIndex := 0;
- end;
-
- procedure TDDedit.EditTABLE_NAMEExit(Sender: TObject);
- {linked to all required fields by object inspector}
- begin
- if sender is tdbedit
- then (sender as tdbedit).color := clLime;
- if sender is tdbCheckBox
- then (sender as tdbCheckBox).color := clLime;
- if sender is tdbMemo
- then (sender as tdbMemo).color := clLime;
- if sender is tdbRadioGroup
- then (sender as tdbRadioGroup).color := clLime;
-
- end;
-
- procedure TDDedit.FontButtonClick(Sender: TObject);
- begin
- FontDialog1.Font := DDedit.Font;
- if FontDialog1.Execute
- then DDedit.Font := FontDialog1.Font;
- end;
-
- procedure TDDedit.FormKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if DataSource1.State in [dsEdit, dsInsert, dsBrowse]
- then begin
- if key = VK_NEXT
- then DataSource1.dataset.next;
- if key = VK_PRIOR
- then DataSource1.dataset.prior;
- { AFter writing all this, it turns out clipboard automatically
- supported .. adding this code just puts two copies of whatever's in the
- clipboard into the element when you paste!
- if sender is tdbmemo
- then begin
- if (Shift = [ssctrl]) and (key = ord('X'))
- then (sender as tdbmemo).cutToClipboard;
- if (Shift = [ssctrl]) and (key = ord('C'))
- then (sender as tdbmemo).copyToClipboard;
- if (Shift = [ssctrl]) and (key = ord('V'))
- then (sender as tdbmemo).PasteFromClipboard;
- end;
- if sender is tdbedit
- then begin
- if (Shift = [ssctrl]) and (key = ord('X'))
- then (sender as tdbedit).cutToClipboard;
- if (Shift = [ssctrl]) and (key = ord('C'))
- then (sender as tdbedit).copyToClipboard;
- if (Shift = [ssctrl]) and (key = ord('V'))
- then (sender as tdbedit).PasteFromClipboard;
- end;}
- end;
- end;
-
- procedure TDDedit.CheckBox1Click(Sender: TObject);
- begin
- if CheckBox1.checked
- then begin
- CheckBox1.caption := 'Hints on';
- DdEdit.showHint := true;
- end
- else begin
- CheckBox1.caption := 'Hints off';
- DdEdit.showHint := false;
- end;
- end;
-
- procedure TDDedit.B_resizeClick(Sender: TObject);
- begin
- ScalerForm.setWhichForm(DDedit);
- if ScalerForm.showmodal = mrYes
- then update;
- end;
-
- { These two procedures work fine -- explode the memo to six
- lines when you enter it, and shrink it back when you leave.
- Unfortunately, can't get it to come back to the same place
- in the case where the scrolling kicks in...}
- procedure TDDedit.MemoIDX_EXPRESEnter(Sender: TObject);
- begin
- EnterEditFiel(sender);
- fFormFiddle := false;
- foldheight := (sender as tdbmemo).height;
- foldtop := (sender as tdbmemo).top;
- (sender as tdbmemo).height := (sender as tdbmemo).height * 6;
- if ((sender as tdbmemo).top + (sender as tdbmemo).height) > (DDedit.top + DDedit.height)
- then begin
- fformfiddle := true;
- (sender as tdbmemo).top :=
- DDedit.top + (DDedit.height - (sender as tdbmemo).height - 6);
- end;
- (sender as tdbmemo).BringToFront;
- end;
- procedure TDDedit.MemoIDX_EXPRESExit(Sender: TObject);
- begin
- if fFormFiddle
- then scrollBox.scrollby(0,-(foldheight*6+10));
- (sender as tdbmemo).height := foldheight;
- (sender as tdbmemo).top := foldtop;
- exitEditField(sender);
- update;
- end;
-
- procedure TDDedit.MemoDEFINEClick(Sender: TObject);
- begin
- {Dangerous maneuver, typcasting like this; only doing it
- because I've carefully set this one up to work for the tdbmemo
- fields only.}
- Edit_memo( tdbmemo(sender), EditTable_Name.text, EditField_name.text );
- end;
-
- procedure TDDedit.DBNavigatorClick(Sender: TObject; Button: TNavigateBtn);
- {something to make sure memo fields are scrolled to the top}
- var i : integer;
- begin with DDedit as Tform do
- for i := componentCount -1 downto 0 do
- if components[i] is Tdbmemo
- then (components[i] as tdbmemo).scrollby(0,-20);
- end;
-
- end.
-